首页 > 试题广场 >

最长不含重复字符的子字符串

[编程题]最长不含重复字符的子字符串
  • 热度指数:48065 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
数据范围:

示例1

输入

"abcabcbb"

输出

3

说明

因为无重复字符的最长子串是"abc",所以其长度为 3。    
示例2

输入

"bbbbb"

输出

1

说明

因为无重复字符的最长子串是"b",所以其长度为 1。    
示例3

输入

"pwwkew"

输出

3

说明

因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。    
function lengthOfLongestSubstring(s) {
    // write code here
    if (!s) return 0;
    let dic = new Map();
    let dp = [1];
    let m = 1;
    dic.set(s[0], 0);
    for (i = 1; i < s.length; i++) {
        let j = dic.get(s[i]);
        dp[i] = j === undefined || dp[i - 1] < i - j ? dp[i - 1] + 1 : i - j;
        dic.set(s[i], i);
        m = Math.max(m, dp[i]);
    }
    return m;
}

发表于 2023-03-14 22:30:53 回复(0)
function lengthOfLongestSubstring( s ) {
    let set = new Set(),max=0;
    for(let l=0,r=0;r<s.length;r++){
        while(set.has(s[r])){
            set.delete(s[l++])
        }
        set.add(s[r])
        max = Math.max(max,set.size)
    }
    return max;
}

发表于 2022-08-27 17:54:24 回复(0)
function lengthOfLongestSubstring( s ) {
    if(s.length===0)return 0;
    if(s.length===1)return 1;
    let max=0;
    let left=0;
    let right=1;
    let str=s[0];
    for(let i=1;i<s.length;i++){
        let index=str.indexOf(s[i])
        if(index!==-1)left=left+index+1;
        right=i+1;
        str=s.slice(left,right);
        max=Math.max(max,str.length);
    }
    return max;
}
发表于 2022-07-24 17:17:52 回复(0)

问题信息

难度:
4条回答 3853浏览

热门推荐

通过挑战的用户

查看代码